#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main()
{
  printf("before()\n");
  pid_t i = fork();
  printf("%d\n",i);
  if(i == -1)
  {
    perror("fork()");
    exit(-1);
  }
  else if(i == 0)
  {
    printf("i am child:");
    printf("pid:%d ppid:%d\n",getpid(),getppid());
    sleep(10);
    exit(0);
  }
  else{
    printf("i am parent:");
    printf("pid:%d ppid:%d\n",getpid(),getppid());
  }
 // printf("haha");
 // _exit(0);
 // int status = 0;
 // waitpid(-1,&status,0);
 // if((status>>8)==0)
 
//  int status = 0;
//  int ret = wait(&status);
//  if(ret > 0 && (status & 0x7F)==0)
//  {
//    printf("success:%d\n",(status>>8)&0xFF);
//  }
//  else if(ret > 0)
//  {
//    printf("sig exit:%d\n",(status)&0x7F);
//  }
//
 // int status = 0;
 // pid_t ret = waitpid(-1,&status,0);
 // if(WIFEXITED(status) && ret == i)
 // {
 //   printf("child return code:%d\n",WEXITSTATUS(status));
 // }
 // else{
 //   printf("wait child fail\n");
 //   return 1;
 // }
 // 
 //
 int status = 0;
 pid_t ret = 0;
 do{
    ret = waitpid(-1,&status,WNOHANG);
    if(ret == 0)
    {
      printf("child is runing\n");
      sleep(1);
    }
 }while(ret == 0);
 if(WIFEXITED(status) && ret == i)
 {
    printf("child success exit,its code is:%d\n",WEXITSTATUS(status));
 }
 else{
   printf("wait child fail\n");
   return 1;
 }
  return 0;
}
